package juc;

import java.util.concurrent.TimeUnit;

public class DeadLockDemo {
	public static void main(String args[]){
		String lockA = "lockA";
		String lockB = "lockB";
		new Thread(new HoldLockThread(lockA, lockB)).start();
		new Thread(new HoldLockThread(lockB, lockA)).start();
	}
}

class HoldLockThread implements Runnable {
	private String lockA;
	private String lockB;

	public HoldLockThread(String lockA, String lockB) {
		this.lockA = lockA;
		this.lockB = lockB;
	}

	@Override
	public void run() {
		synchronized (lockA) {
			System.out.println(Thread.currentThread().getName() + " AAA  " + lockA);
			try {
				TimeUnit.SECONDS.sleep(2);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			synchronized (lockB) {
				System.out.println(Thread.currentThread().getName() + " BBB");
			}
		}
	}
}
